%声压级计算函数
function spl = SPLCal( x,fs,flen )
% function spl = SPLCal( x,fs,flen )
% SPLCal函数用于计算一帧语音信号的声压级值
% 输入参数x为输入的语音信号
% 这里用x的值直接替代瞬时声压的值，理论上瞬时声压值跟x的值是成正比的
% 后期会对其进行修正
% 输入参数fs为采样率，单位为Hz
% flen为一帧信号的时间长度，单位为ms
% spl为函数输出的声压级值
%

% 输入的语音帧的长度
Length = length(x);
% 每一帧信号的离散点数
M = flen*fs/1000;
if Length~=M
   error('输入信号长度与所定义帧长不等！'); 
end
%%--------------------------------------------计算有效声压---------------------------------------
% 根据定义计算有效声压，pa = sqrt((x(1)^2+x(2)^2+...+x(M)^2)/M)
% 单位为Pa
pp = 0;
for i = 1:M
   pp = pp + x(i)^2;
end
pa = sqrt(pp/M);
%%--------------------------------------------计算声压级-----------------------------------------
% 声压级值spl=20*log10(pa/p0),单位为dB
% 基准声压p0，单位为Pa
p0 = 2*10^-5;
spl = 20*log10(pa/p0);
end

